# -*- coding: utf-8 -*-
module JpMailer::Mobile::Base

  def mobile_template?
    dir = "#{template_root}/#{mailer_name}"
    mobile_dir = "#{dir}/mobile"
    FileTest.directory?(mobile_dir) ? true : false
  end

  def template_path
    dir = "#{template_root}/#{mailer_name}"
    mobile_template? ? dir : "#{dir}/mobile"
  end

  def render(opts)
    body = opts.delete(:body)
    if opts[:file] && opts[:file] !~ /\//
      if mobile_template?
        opts[:file] = "#{mailer_name}/mobile/#{opts[:file]}"
      else
        opts[:file] = "#{mailer_name}/#{opts[:file]}"
      end
    end
    initialize_template_class(body).render(opts)
  end

  # 文字コード変換前の実行されるフックメソッド
  @@ZENKAKU = %w(ガ ギ グ ゲ ゴ ザ ジ ズ ゼ ゾ ダ ヂ ヅ デ ド バ ビ ブ ベ ボ パ ピ プ ペ ポ ヴ ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ タ チ ツ テ ト ナ ニ ヌ ネ ノ ハ ヒ フ ヘ ホ マ ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ヲ ン ャ ュ ョ ァ ィ ゥ ェ ォ ッ ゛ ゜ ー ).freeze
  @@HANKAKU = %w(ｶﾞ ｷﾞ ｸﾞ ｹﾞ ｺﾞ ｻﾞ ｼﾞ ｽﾞ ｾﾞ ｿﾞ ﾀﾞ ﾁﾞ ﾂﾞ ﾃﾞ ﾄﾞ ﾊﾞ ﾋﾞ ﾌﾞ ﾍﾞ ﾎﾞ ﾊﾟ ﾋﾟ ﾌﾟ ﾍﾟ ﾎﾟ ｳﾞ ｱ ｲ ｳ ｴ ｵ ｶ ｷ ｸ ｹ ｺ ｻ ｼ ｽ ｾ ｿ ﾀ ﾁ ﾂ ﾃ ﾄ ﾅ ﾆ ﾇ ﾈ ﾉ ﾊ ﾋ ﾌ ﾍ ﾎ ﾏ ﾐ ﾑ ﾒ ﾓ ﾔ ﾕ ﾖ ﾗ ﾘ ﾙ ﾚ ﾛ ﾜ ｦ ﾝ ｬ ｭ ｮ ｧ ｨ ｩ ｪ ｫ ｯ ﾞ ﾟ ｰ).freeze
  def filter_with_hanzen(text)
    text = filter_without_hanzen(text).clone
    @@ZENKAKU.each_with_index do |int, i|
      text.gsub!(int, @@HANKAKU[i])
    end
    text
  end

  def self.extended(receiver)
    class << receiver
      alias :filter_without_hanzen :filter
      alias :filter :filter_with_hanzen
    end
  end

  # +address+が携帯電話のメールアドレスならキャリアに対応するModuleを返す
  # 携帯電話ではない場合は+nil+
  def self.type_of?(address)
    [JpMailer::Mobile::Docomo, JpMailer::Mobile::Au, JpMailer::Mobile::Softbank].each do |klass|
      return klass if klass.match_recipient?(address)
    end
    nil
  end

  def self.is_mobile?(address)
    !self.type_of?(address).nil?
  end

end
